using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace Concurrente.Lab10
{
    class Program
    {
        static object bloqueo=new object();//Adicionado
        static object D;
        static int peticion=10;
        static Thread pA;
        static Thread pB;

        static void Main(string[] args)
        {            
            while (true)
            {
                D = 20;
                Console.WriteLine("D = " + D);
                pA = new Thread(ProcesoA);
                pB = new Thread(ProcesoB);
                pA.Start();
                pB.Start();
                Console.ReadLine();
            }
        }

        public static void ProcesoA() 
        {
            Random r = new Random();
            Thread.Sleep(r.Next(1, 1000));

            Monitor.Enter(bloqueo);//Cambiado            
            D = (int)D - peticion;
            Console.WriteLine("Proceso A: D = " + D);
            Monitor.Exit(bloqueo);//Cambiado
            
            pA.Abort();
        }

        public static void ProcesoB()
        {
            Random r = new Random();
            Thread.Sleep(r.Next(1, 1000));
            Monitor.Enter(bloqueo);            
            D = (int)D - peticion;
            Console.WriteLine("Proceso B: D = " + D);
            Monitor.Exit(bloqueo);
            
            pB.Abort();
        }
    }
}
